Trivyの脆弱性スキャン結果をFutureVulsに連携してみた(CLI編)

Trivyの脆弱性スキャン結果をFutureVulsに連携してみた(CLI編)

Clock Icon2020.08.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Trivy は OSS のコンテナ脆弱性スキャンツールで、コンテナの OS パッケージやアプリケーションの依存ライブラリの脆弱性を検出します。

https://dev.classmethod.jp/articles/trivy_poc/

脆弱性管理ツールの FutureVuls に Trivy でスキャンした結果を連携し、FutureVuls でコンテナの脆弱性管理をしてみます。

環境

以下の環境で実行しています。

  • Amazon Linux2
  • Docker version 19.03.6-ce, build 369ce74

やってみた

trivy をインストールします。

$ export TRIVY_VERSION=0.10.0
$ wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
$ mkdir trivy && tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz -C trivy

trivy-to-vuls をインストールします。trivy-to-vuls では trivy のスキャン結果を vuls のレポート形式に変換しています。

$ export VULS_VERSION=0.10.0
$ wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz
$ mkdir trivy-to-vuls && tar zxvf trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz -C trivy-to-vuls

future-vuls をインストールします。

$ export VULS_VERSION=0.10.0
$ wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/future-vuls_${VULS_VERSION}_linux_amd64.tar.gz
$ mkdir future-vuls && tar zxvf future-vuls_${VULS_VERSION}_linux_amd64.tar.gz -C future-vuls

スキャン用のコンテナを用意します。今回は Alpine Linux をスキャンしてみます。

FROM alpine:3.4
$ docker build -t alpine .

続いて、以下の環境変数を設定します。

  • FVULS_SERVER_UUID
  • FVULS_GROUP_ID
  • FVULS_TOKEN

FVULS_SERVER_UUID は、FutureVuls で使用するサーバー ID(サーバーを一意に特定するための UUID)を設定します。ここでは uuidgen コマンドでサーバー ID を生成しています。

$ uuidgen && fvuls_server_uuid
$ export FVULS_SERVER_UUID=`cat fvuls_server_uuid`

FVULS_GROUP_ID は、FutureVuls のグループ ID を設定します。グループ ID は管理画面の URL から確認できます。

$ export FVULS_GROUP_ID=xxx

FVULS_TOKEN は、FutureVuls のスキャントークンを設定します。管理画面のグループ設定 > トークンから確認します。

$ export FVULS_TOKEN=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Trivy でスキャンし、FutureVuls にスキャン結果をアップロードします。

$ ./trivy/trivy -q image -f=json alpine | \
  ./trivy-to-vuls/trivy-to-vuls parse --stdin | \
  ./future-vuls/future-vuls upload --stdin \
      --url ${FVULS_AUTH_URL} \
      --group-id ${FVULS_GROUP_ID} \
      --token ${FVULS_TOKEN} \
     --uuid ${FVULS_SERVER_UUID}

FutureVuls で結果がアップロードされていることを確認します。
[サーバ]タブをクリックすると、コンテナの情報が登録されています。

[脆弱性]タブをクリックし、該当する脆弱性の一覧が表示されました!

さいごに

Trivy のコンテナの脆弱性スキャンして結果を FutureVuls に取り込んでみました。
サーバーだけでなくコンテナの脆弱性も簡単に管理できることがわかりました。
今回は CLI 上で行いましたが、実際の運用では CI/CD パイプラインに組み込んで使われるケースがほとんどと思います。次は CI/CD パイプラインに組み込んだパターンも試してみたいと思います。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.